package com.itls.recommendedgames.mapper;


import com.itls.recommendedgames.entity.Game;
import com.itls.recommendedgames.entity.GamePopularity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface GameMapper {

    /**
     * 获取所有游戏及其标签
     */
    List<Game> findAllGamesWithTags();

    /**
     * 根据游戏ID列表批量获取游戏信息
     *
     * @param gameIds 游戏ID列表
     * @return 游戏列表
     */
    List<Game> findGamesByIds(@Param("gameIds") List<Integer> gameIds);

    /**
     * 获取用户已拥有的游戏ID列表
     *
     * @param userId 用户ID
     * @return 已拥有的游戏ID列表
     */
    List<Integer> getUserOwnedGameIds(@Param("userId") Integer userId);

    /**
     * 获取所有游戏的流行度得分（基于拥有量）
     *
     * @return 游戏ID到流行度得分的映射
     */
    List<GamePopularity> getGamePopularityScores();

    /**
     * 获取与指定游戏标签相似的游戏ID列表
     *
     * @param tagNames 标签名称列表
     * @param limit  返回游戏数量限制
     * @return 相似游戏ID列表
     */
    List<Integer> getSimilarGamesByTags(@Param("tagNames") List<String> tagNames, @Param("limit") int limit);

    /**
     * 获取与目标用户行为相似的用户ID列表
     *
     * @param userId 用户ID
     * @param limit  返回用户数量限制
     * @return 相似用户ID列表
     */
    List<Integer> getSimilarUsers(@Param("userId") Integer userId, @Param("limit") int limit);


    /**
     * 获取所有高评分游戏
     *
     * @param limit 返回游戏数量限制
     * @return 高评分游戏列表
     */
    List<Game> getHighRatedGames(@Param("limit") int limit);

    /**
     * 获取用户游戏游玩时长数据
     *
     * @param userId 用户ID
     * @return 游戏ID到游玩时长的映射
     */
    List<Map<String, Object>> getUserPlayTimeMap(@Param("userId") Integer userId);


    /**
     * 获取基于游玩时长相似的用户ID列表
     *
     * @param userId 用户ID
     * @param limit 返回用户数量限制
     * @return 相似用户ID列表
     */
    List<Integer> getSimilarUsersByPlayTime(@Param("userId") Integer userId, @Param("limit") int limit);
}